﻿Public Class FrmTrasladoBga

    Private COD_BD_PROD_1, COD_BD_PROD_2, EXIST_2 As String
    Private dTras As GBDZafiro.Dtraslado

    Private Sub FrmTrasladoBga_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        cargarCmbBgas()
        tbFecha.Text = (New Tools).fecha
        AgregarText()
        btImprimir.Enabled = False
    End Sub

    Protected Overrides Sub bnNuevo_Click(sender As Object, e As System.EventArgs)
        MyBase.bnNuevo_Click(sender, e)
        gvTraslado.Rows.Clear()
        AgregarText()
        tbNumTraslado.Focus()
        btImprimir.Enabled = False
    End Sub

    Protected Overrides Sub bnGuardar_Click(sender As Object, e As System.EventArgs)
        If ValidarCampos() Then
            If guardar() Then
                MyBase.bnGuardar_Click(sender, e)
                btImprimir.Enabled = True
            End If
        End If
    End Sub

    Protected Overrides Sub bnCancelar_Click(sender As Object, e As System.EventArgs)
        MyBase.bnCancelar_Click(sender, e)
        AgregarText()
    End Sub

    Protected Overrides Sub bnEliminar_Click(sender As Object, e As System.EventArgs)
        If tbObservacion.TextLength < 1 Then
            msnBox.msnExclamacion("Digite la Observacion")
            Exit Sub
        End If
        If msnBox.msnQuestion("Esta seguro de anular el traslado numero: " + tbNumTraslado.Text) = Windows.Forms.DialogResult.Yes Then

            Dim result As GBDZafiro.Resultado
            Dim mTraslado As GBDZafiro.Mtraslado = crearMTraslado()
            mTraslado.COD_USU_ANULA = mTraslado.COD_USUARIO
            mTraslado.FECHA_ANULACION = Now
            mTraslado.OBS_ANULACION = mTraslado.OBSERVACION
            result = GBDZafiro.Mtraslado.Actualizar(mTraslado)

            If result.ExisteError Then
                msnBox.msnError(result.Mensaje)
            Else
                MyBase.bnEliminar_Click(sender, e)
                AgregarText()
                gvTraslado.Rows.Clear()
                btImprimir.Enabled = False
            End If

        End If
    End Sub

    Private Sub btBuscar1_Click(sender As System.Object, e As System.EventArgs) Handles btBuscar1.Click
        nuevo()
        Dim tool As New Tools
        Dim prod As GBDZafiro.Producto = tool.buscarProducto()
        If prod IsNot Nothing Then

            tbProducto.Text = prod.codProducto
            tbExis.Text = prod.existencia
            tbDescripcion.Text = prod.descripcion
            tbUnd.Text = prod.idUniMed
            cmbBga1.SelectedValue = prod.bdReferencia

        End If
    End Sub

    Private Sub btAgregar_Click(sender As System.Object, e As System.EventArgs) Handles btAgregar.Click

        Dim prodBga As GBDZafiro.ProductoBodega
        If COD_BD_PROD_1 Is Nothing OrElse COD_BD_PROD_1.Length < 1 Then
            prodBga = (New Tools).agregarProdBga(tbProducto.Text, cmbBga1.SelectedValue)
            COD_BD_PROD_1 = prodBga.codBdProd
        End If

        If COD_BD_PROD_2 Is Nothing OrElse COD_BD_PROD_2.Length < 1 Then
            prodBga = (New Tools).agregarProdBga(tbProducto.Text, cmbBga2.SelectedValue)
            COD_BD_PROD_2 = prodBga.codBdProd
            EXIST_2 = prodBga.existencia.ToString
        End If

        If camposCompletos() Then
            gvTraslado.Rows.Add(tbProducto.Text, tbDescripcion.Text, tbUnd.Text, cmbBga1.SelectedValue, tbCantSal.Text, cmbBga2.SelectedValue, _
                                tbExisBga.Text, EXIST_2, COD_BD_PROD_1, COD_BD_PROD_2)
            nuevo()
        End If
    End Sub

    Private Sub btDeshacer_Click(sender As System.Object, e As System.EventArgs) Handles btDeshacer.Click
        Dim rprod As DataGridViewRow = gvTraslado.CurrentRow
        gvTraslado.Rows.Remove(rprod)
    End Sub

    Private Sub btImprimir_Click(sender As System.Object, e As System.EventArgs) Handles btImprimir.Click
        imprimirTraslado()
    End Sub

    Private Sub cmbBga1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs)
        Dim prodBga As GBDZafiro.ProductoBodega = (New Tools).crearProdBga(tbProducto.Text, cmbBga1.SelectedValue)
        tbExisBga.Text = prodBga.existencia
        COD_BD_PROD_1 = prodBga.codBdProd
        cmbBga2_SelectedIndexChanged(sender, e)
    End Sub

    Private Sub cmbBga2_SelectedIndexChanged(sender As System.Object, e As System.EventArgs)
        Dim ProdBga As GBDZafiro.ProductoBodega = (New Tools).crearProdBga(tbProducto.Text, cmbBga2.SelectedValue)
        If ProdBga.codBdProd IsNot Nothing Then
            'msnBox.msnExclamacion("No hay existencias del producto en esta bodega") ' No guardo si no existe el producto en Producto_Bodega
            COD_BD_PROD_2 = ProdBga.codBdProd
            EXIST_2 = ProdBga.existencia.ToString
        End If
    End Sub

    Private Sub tbCantSal_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles tbCantSal.KeyPress
        Validaciones.SoloNumeros(sender, e)
    End Sub

    Private Sub tbNumTraslado_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles tbNumTraslado.KeyPress
        Validaciones.SoloNumeros(sender, e)
    End Sub

    Private Sub tbCantSal_Leave(sender As System.Object, e As System.EventArgs) Handles tbCantSal.Leave
        If tbExisBga.TextLength < 1 Then
            msnBox.msnExclamacion("No hay existencias en bodega!!!")
            tbCantSal.Clear()
            Exit Sub
        End If

        If tbCantSal.TextLength < 1 Then
            Exit Sub
        End If

        Dim a As Decimal = CDec(tbExisBga.Text)
        Dim b As Decimal = CDec(tbCantSal.Text)

        If b > a Then
            msnBox.msnExclamacion("La cantidad de salida supera la existencia en bodega!!!")
            tbCantSal.Clear()
            tbCantEntra.Clear()
            tbCantSal.Focus()
        Else
            Validaciones.formatMoney(sender)
            tbCantEntra.Text = tbCantSal.Text
        End If
    End Sub

    Private Sub cargarCmbBgas()
        cmbBga1.DataSource = GBDZafiro.Bodega.ConsultarAll
        cmbBga2.DataSource = GBDZafiro.Bodega.ConsultarAll

        cmbBga1.ValueMember = "COD_BODEGA"
        cmbBga2.ValueMember = "COD_BODEGA"

        cmbBga1.DisplayMember = "COD_BODEGA"
        cmbBga2.DisplayMember = "COD_BODEGA"

        AddHandler cmbBga1.SelectedIndexChanged, AddressOf cmbBga1_SelectedIndexChanged
        AddHandler cmbBga2.SelectedIndexChanged, AddressOf cmbBga2_SelectedIndexChanged
    End Sub

    Private Function guardar() As Boolean
        Dim mTras As GBDZafiro.Mtraslado = crearMTraslado()

        Dim dtTraslado As DataTable = crearDtDTraslado()
        Dim result As GBDZafiro.Resultado = GBDZafiro.Mtraslado.Nuevo(mTras)

        If result.ExisteError Then
            msnBox.msnError(result.Mensaje)
            Return False
            Exit Function
        Else
            tbNumTraslado.Text = result.NumSoporte
            result = GBDZafiro.Dtraslado.nuevo(dtTraslado, tbNumTraslado.Text)
            If result.ExisteError Then
                msnBox.msnError(result.Mensaje)
                Return False
                Exit Function
            End If
        End If

        Return True
    End Function

    Private Function crearMTraslado()
        Dim MTraslado As New GBDZafiro.Mtraslado
        MTraslado.NUM_TRASLADO = tbNumTraslado.Text.ToUpper
        MTraslado.COD_USUARIO = Login.usuario.codUsuario
        MTraslado.OBSERVACION = tbObservacion.Text.ToUpper
        MTraslado.ESTADO = "A"
        MTraslado.FECHA_TRASLADO = dtpFecha.Value
        Return MTraslado
    End Function

    Private Function crearDtraslado(ByRef ProdBga As GBDZafiro.ProductoBodega) As GBDZafiro.Dtraslado
        Dim dTras As New GBDZafiro.Dtraslado
        dTras.NUM_TRASLADO = tbNumTraslado.Text
        dTras.COD_BD_PROD_1 = COD_BD_PROD_1
        dTras.COD_BD_PROD_2 = ProdBga.codBdProd

        dTras.CANTIDAD_1 = CDec(tbCantSal.Text)
        dTras.CANTIDAD_2 = CDec(tbCantSal.Text)
        dTras.EXISTE_1 = CDec(tbExisBga.Text)
        dTras.EXISTE_2 = ProdBga.existencia
        Return dTras
    End Function

    Private Function crearDtDTraslado() As DataTable
        Dim dtDTraslado As New DataTable

        dtDTraslado.Columns.Add("COD_BD_PROD_1")
        dtDTraslado.Columns.Add("CANTIDAD1")
        dtDTraslado.Columns.Add("COD_BD_PROD_2")
        dtDTraslado.Columns.Add("CANTIDAD2")
        dtDTraslado.Columns.Add("EXISTE_1")
        dtDTraslado.Columns.Add("EXISTE_2")
        dtDTraslado.Columns.Add("CODIGO1")
        dtDTraslado.Columns.Add("DESCRIPCION1")
        dtDTraslado.Columns.Add("CODIGO2")
        dtDTraslado.Columns.Add("DESCRIPCION2")

        dtDTraslado.Columns.Add("UNIDAD1")
        dtDTraslado.Columns.Add("BD1")
        dtDTraslado.Columns.Add("UNIDAD2")
        dtDTraslado.Columns.Add("BD2")

        For Each rTraslado As DataGridViewRow In gvTraslado.Rows
            dtDTraslado.Rows.Add(rTraslado.Cells("COD_BD_PROD1").Value, rTraslado.Cells("CANTIDAD1").Value, _
                                 rTraslado.Cells("COD_BD_PROD2").Value, rTraslado.Cells("CANTIDAD1").Value, _
                                 rTraslado.Cells("EXISTE_1").Value, rTraslado.Cells("EXISTE_2").Value,
                                 rTraslado.Cells("CODIGO1").Value, rTraslado.Cells("DESCRIPCION1").Value, _
                                 rTraslado.Cells("CODIGO1").Value, rTraslado.Cells("DESCRIPCION1").Value, _
                                 rTraslado.Cells("UNIDAD1").Value, rTraslado.Cells("BD1").Value, _
                                 rTraslado.Cells("UNIDAD1").Value, rTraslado.Cells("BD2").Value)

        Next

        Return dtDTraslado
    End Function

    Private Function crearDtTraslado() As DataTable
        Dim dtTraslado As New DataTable
        dtTraslado.Columns.Add("COD_PRODUCTO")
        dtTraslado.Columns.Add("ID_UNIDAD_MEDIDA")
        dtTraslado.Columns.Add("DESCRIPCION")
        dtTraslado.Columns.Add("CANTIDAD", System.Type.GetType("System.Decimal"))
        dtTraslado.Columns.Add("COD_BODEGA1")
        dtTraslado.Columns.Add("COD_BODEGA2")

        For Each rTraslado As DataGridViewRow In gvTraslado.Rows
            dtTraslado.Rows.Add(rTraslado.Cells("CODIGO1").Value, rTraslado.Cells("UNIDAD1").Value, _
                                rTraslado.Cells("DESCRIPCION1").Value, rTraslado.Cells("CANTIDAD1").Value, _
                                rTraslado.Cells("BD1").Value, rTraslado.Cells("BD2").Value)

        Next

        Return dtTraslado
    End Function

    Private Function ValidarCampos() As Boolean
        If tbObservacion.TextLength < 1 Then
            msnBox.msnExclamacion("Digite la observación")
            Return False
            Exit Function
        End If

        If gvTraslado.Rows.Count < 1 Then
            msnBox.msnExclamacion("No ha agregado ningun Prodcuto a Trasladar")
            Return False
            Exit Function
        End If

        Return True
    End Function

    Private Function camposCompletos() As Boolean
        If tbProducto.TextLength < 1 Or tbCantEntra.TextLength < 1 Or tbCantSal.TextLength < 1 Or tbDescripcion.TextLength < 1 Or _
            tbExisBga.TextLength < 1 Or tbUnd.TextLength < 1 Then
            msnBox.msnExclamacion("No existen Productos para agregar al traslado!!!")
            Return False

            'ElseIf EXIST_2 Is Nothing OrElse EXIST_2.Length < 1 Or COD_BD_PROD_2.Length < 1 Then
            '    msnBox.msnExclamacion("No hay existencias del producto en esta bodega de Entrada!!!")
            '    Return False

        ElseIf cmbBga1.SelectedValue = cmbBga2.SelectedValue Then
            msnBox.msnExclamacion("Seleccione una bodega de Entrada distinta a la de Salida!!!")
            Return False

        Else
            Return True

        End If
    End Function

    Private Sub nuevo()
        tbProducto.Clear()
        tbDescripcion.Clear()
        tbUnd.Clear()
        tbExis.Clear()
        tbExisBga.Clear()
        tbCantEntra.Clear()
        tbCantSal.Clear()

    End Sub

    Private Sub AgregarText()
        btDeshacer.Text = "Deshacer"
        btAgregar.Text = "Agregar"
    End Sub

    Private Sub imprimirTraslado()
        If ValidarCampos() Then
            Dim mTras As GBDZafiro.Mtraslado
            Dim usuario As GBDZafiro.Usuario

            mTras = (New Tools).crearMtraslado(tbNumTraslado.Text)
            If GBDZafiro.Mtraslado.exisMTraslado(mTras) Then
                usuario = (New Tools).crearUsuario(mTras.COD_USUARIO)

                Dim FrmRptTrasladoBga As New FrmRptTrasladoBga(tbNumTraslado.Text, crearDtTraslado(), _
                                                                    mTras.FECHA_TRASLADO, usuario)
                FrmRptTrasladoBga.ShowDialog(Me)

            Else
                msnBox.msnExclamacion("El numero de Traslado no existe!!!")
            End If
            
        End If
    End Sub

End Class
